package com.proxy.util;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    private ProxyUtil(){}
    public static <T>T createStarProxy(T star){
        return (T)Proxy.newProxyInstance(
                // 使用类加载器加载代理对象
                ProxyUtil.class.getClassLoader(),
                // 获取被代理对象所实现的接口
                star.getClass().getInterfaces(),
                // 代理对象具体要实现的内容
                (proxy, method, args) -> {
                    if ("sing".equals(method.getName())) {
                        System.out.println("唱歌场地已经准备就绪，收到80万元！");
                    } else if ("dancing".equals(method.getName())) {
                        System.out.println("跳舞场地已经准备就绪，收到100万元！");
                    }
                    // 代理对象调用被代理对象的方法，应该传入被代理对象，否则会报错对象不存在
                    return method.invoke(star,args);
                });
    }
}
